#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;

template<typename T, size_t N>
void sum_prime(T (&arr)[N])
{
	memset(arr,1,sizeof(arr));
	int ret=0;
	int SQRT = (int)sqrt(N)+1;
	for( int i =3; i < SQRT; i+=2)
	{
		if(arr[i])
		{
			for(int j=i*i;j<N; j+=i*2)
			{
				arr[j]=0;
			}
		}

	}
	// long long isum=0;
	// for( int i =3; i <N; i+=2)
	// {
	// 	if( arr[i] )
	// 	{
	// 		cout<<i<<endl;
	// 		isum += i;			
	// 	}
	// }
	// return isum;
}

int fib(int i)
{
	if(i==0) return 0;
	if(i==1) return 1;
	int init_a=0,init_b=1;
	int bret;
	for(int j=0;j<i;++j)
	{
		bret = init_b+init_a;
		init_a = init_b;
		init_b = bret;
	}
	return bret;
}


bool isPrime(int i)
{
	if(i<=0) return false;
	if(i==2) return true;
	if(i%2==0) return false;
	//if(i==3) return true;
	int SQRT = (int)sqrt(i)+1;
	for(int j=3;j<SQRT;j+=2)
	{
		if(i%j==0)
			return false;
	}
	return true;
}

int main()
{
	const int runcount = 100;
	int a[] = {3,4,9,14,15,19,28,37,47,50,54,56,59,61,70,73,78,81,92,95,97,99};
	int i=10;
	while(fib(i)<227000)
	{
		i++;
	}
	cout<<fib(i)<<endl;

	while(!isPrime(fib(i)))
	{
		i++;
	}

	cout<<fib(i)<<endl;

	char arr[514230];
	//for( int i = 0; i < runcount; ++ i)
	sum_prime(arr);
	int isum = 2;
	for(int i=3;i<514230/2;i+=2)
	{
		if(arr[i] && (514230%i)==0)
		{
			isum += i;
			cout<<i<<endl;			
		}
	}
	//cout<<isPrime(227011)<<endl;
	cout<<endl<<isum<<endl;


	return 0;
}
